#pragma once
#include <iostream>
#include <string>
#include <functional>
#include <windows.h>
#include <graphics.h>
#include"Button.h"
using namespace std;
class TextBox {
private:
    int x; int firstX; int secondX; // 文本框x坐标（当前/第一状态/第二状态）
    int y; int firstY; int secondY; // 文本框y坐标（当前/第一状态/第二状态）
    int width;  int firstWidth; int secondWidth; // 文本框宽度（当前/第一状态/第二状态）
    int height; int firstHeight; int secondHeight; // 文本框高度（当前/第一状态/第二状态）
    int maxWord;      // 最长单词个数
    int style;      // 矩阵样式（1=普通矩阵，2=圆角矩阵）
    wstring text;   // 文本内容
    wstring placeholderText;    // 默认文本内容
    int placeholderTextBig, firstplaceholderTextBig, secondplaceholderTextBig;   // 默认文本文字大小（当前/第一状态/第二状态）
    int borderRadius = 5;       // 圆角半径
    int buttonWidth = 40;       // 按钮宽度
    int ellipseWidth, ellipseHeight; // 椭圆宽高
    bool isSelected;     // 是否被选中
    bool showCursor;     // 是否显示光标
    int cursorPos;       // 光标位置
    TextBox* nextField = nullptr; // 指向下一个输入框的指针
    function<void()> onFinalEnter = nullptr; // 最终回车回调函数
public:
    TextBox(int x, int y, int width, int height, int maxWord, int style = 1); // 构造函数
    bool backspace;      // 退格标志
    wstring getText() const;    // 获取文本内容（添加const修饰符）
    bool getSelect();          // 获取选中状态
    bool isEmpty() const;            // 判断是否为空
    void setNextField(TextBox* next); // 设置下一个输入框
    void setFinalCallback(const function<void()>& callback); // 设置最终确认回调
    void setSecondPosition(int x, int y, int width, int height); // 设置第二状态位置和大小
    void setDefaultText(const wstring& newText, int TextBig = 22); // 设置默认文本及大小
    void setSecondDefaultText(int _placeholderTextBig); // 设置第二状态默认文本大小
    void updateSecond(); // 更新到第二状态
    void clear();                    // 清空文本框
    void setText(const wstring& newText); // 设置文本（优化参数传递）
    void drawBorderedRoundRect(int left, int top, int right, int bottom, COLORREF fillColor = WHITE, COLORREF borderColor = BLACK, int borderWidth = 1); // 绘制带边框的圆角矩形
    void draw();                     // 绘制文本框
    bool checkClick(int mouseX, int mouseY); // 检查点击事件
    bool keyInput(wchar_t ch);       // 处理键盘输入
    // 在 TextBox 类中添加处理函数
    bool handleKeyEvent(int vkCode);
    void updateCursor();             // 更新光标状态
};